<?php

date_default_timezone_set('Asia/Ho_Chi_Minh');
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Rate extends CI_Controller {

    private $_data;

    function __construct() {
        parent::__construct();
        $this->load->model(array('companymodel', 'ratemodel',
            'company_comment_model', 'recruitmentmodel',
            'recruitment_comment_model',
            'admodel', 'ad_comment_model',
            'booth_products_model', 'booth_product_comment_model'));

        if ($this->router->method != 'index' AND $this->router->method != 'view') {
            if (!isset($_SESSION['userLoggedIn'])) {
                redirect();
            }
        }
    }

    function index($rated_id = null, $type = null, $score = null) {
        $data['rated_id'] = $rated_id;
        $data['type'] = $type;
        $data['user_id'] = (int) $_SESSION['userLoggedIn']['id'];
        $data['score'] = $score;
        $result = "";
        if ($score > 5 || $score < 1) {
            // Nếu điểm số không hợp lệ, thông báo lỗi
            $result['error'] = 1;
            $result['message'] = "Số điểm xếp hạng không hợp lệ. Vui lòng chọn số điểm từ 1-5!";
        } else if ($type < 0 || $type > 4) {
            // Nếu loại xếp hạng không hợp lệ, thông báo lỗi
            $result['error'] = 1;
            $result['message'] = "Thông tin xếp hạng không hợp lệ!";
        } else {
            if ($type == 1) {
                // Rate cho doanh nghiệp
                $company = $this->companymodel->getCompanyById($rated_id);
                if (isset($company['company_id']) && $company['company_id'] != "") {
                    // Nếu tồn tại doanh nghiệp
                    $rate = $this->ratemodel->getRateByUserIdAndRatedIdAndType($data['user_id'], $data['rated_id'], $type);
                    if (isset($rate['id']) && $rate['id'] != "") {
                        // Nếu người dùng đã rate cho doanh nghiệp rồi
                        $result['error'] = 1;
                        $result['message'] = "Bạn đã xếp hạng cho doanh nghiệp này. Vui lòng không thử lại!";
                    } else {
                        // Nếu người dùng chưa rate cho doanh nghiệp
                        $this->ratemodel->add($data);
                        $data['average'] = $this->ratemodel->getAverageRateByRatedIdAndType($data['rated_id'], $data['type']);
                        if (isset($data['average']['value']) && $data['average']['value'] != "") {
                            // Nếu lấy được giá trị trung bình rate (rate bình thường)
                            $this->companymodel->changeRate($data['rated_id'], array('rate' => $data['average']['value']));
                            $result['value'] = $data['average']['value'];
                        } else {
                            // Nếu không lấy được giá trị trung bình rate (xảy ra lỗi)
                            $result['error'] = 1;
                            $result['message'] = "Thao tác không thành công. Vui lòng thử lại sau!";
                        }
                    }
                } else {
                    // Nếu doanh nghiệp không tồn tại
                    $result['error'] = 1;
                    $result['message'] = "Doanh nghiệp không tồn tại hoặc đã bị xoá. Vui lòng chọn doanh nghiệp khác để xếp hạng!";
                }
            } else if ($type == 2) {
                // Rate cho hồ sơ
                $recruitment = $this->recruitmentmodel->getRecruitmentById($rated_id);
                if (isset($recruitment['recruitment_id']) && $recruitment['recruitment_id'] != "") {
                    // Nếu tồn tại hồ sơ
                    $rate = $this->ratemodel->getRateByUserIdAndRatedIdAndType($data['user_id'], $data['rated_id'], $type);
                    if (isset($rate['id']) && $rate['id'] != "") {
                        // Nếu người dùng đã rate cho hồ sơ rồi
                        $result['error'] = 1;
                        $result['message'] = "Bạn đã xếp hạng cho hồ sơ này. Vui lòng không thử lại!";
                    } else {
                        // Nếu người dùng chưa rate cho hồ sơ
                        $this->ratemodel->add($data);
                        $data['average'] = $this->ratemodel->getAverageRateByRatedIdAndType($data['rated_id'], $data['type']);
                        if (isset($data['average']['value']) && $data['average']['value'] != "") {
                            // Nếu lấy được giá trị trung bình rate (rate bình thường)
                            $this->recruitmentmodel->changeRate($data['rated_id'], array('rate' => $data['average']['value']));
                            $result['value'] = $data['average']['value'];
                        } else {
                            // Nếu không lấy được giá trị trung bình rate (xảy ra lỗi)
                            $result['error'] = 1;
                            $result['message'] = "Thao tác không thành công. Vui lòng thử lại sau!";
                        }
                    }
                } else {
                    // Nếu hồ sơ không tồn tại
                    $result['error'] = 1;
                    $result['message'] = "Hồ sơ không tồn tại hoặc đã bị xoá. Vui lòng chọn hồ sơ khác để xếp hạng!";
                }
            } else if ($type == 3) {
                // Rate cho rao vặt
                $ad = $this->admodel->getAdById($rated_id);
                if (isset($ad['ad_id']) && $ad['ad_id'] != "") {
                    // Nếu tồn tại rao vặt
                    $rate = $this->ratemodel->getRateByUserIdAndRatedIdAndType($data['user_id'], $data['rated_id'], $type);
                    if (isset($rate['id']) && $rate['id'] != "") {
                        // Nếu người dùng đã rate cho rao vặt rồi
                        $result['error'] = 1;
                        $result['message'] = "Bạn đã xếp hạng cho rao vặt này. Vui lòng không thử lại!";
                    } else {
                        // Nếu người dùng chưa rate cho rao vặt
                        $this->ratemodel->add($data);
                        $data['average'] = $this->ratemodel->getAverageRateByRatedIdAndType($data['rated_id'], $data['type']);
                        if (isset($data['average']['value']) && $data['average']['value'] != "") {
                            // Nếu lấy được giá trị trung bình rate (rate bình thường)
                            $this->admodel->changeRate($data['rated_id'], array('rate' => $data['average']['value']));
                            $result['value'] = $data['average']['value'];
                        } else {
                            // Nếu không lấy được giá trị trung bình rate (xảy ra lỗi)
                            $result['error'] = 1;
                            $result['message'] = "Thao tác không thành công. Vui lòng thử lại sau!";
                        }
                    }
                } else {
                    // Nếu rao vặt không tồn tại
                    $result['error'] = 1;
                    $result['message'] = "Hồ sơ không tồn tại hoặc đã bị xoá. Vui lòng chọn hồ sơ khác để xếp hạng!";
                }
            } else if ($type == 4) {
                // Rate cho sản phẩm
                $booth_product = $this->booth_products_model->getBoothProductById($rated_id);
                if (isset($booth_product['id']) && $booth_product['id'] != "") {
                    // Nếu tồn tại sản phẩm
                    $rate = $this->ratemodel->getRateByUserIdAndRatedIdAndType($data['user_id'], $data['rated_id'], $type);
                    if (isset($rate['id']) && $rate['id'] != "") {
                        // Nếu người dùng đã rate cho sản phẩm rồi
                        $result['error'] = 1;
                        $result['message'] = "Bạn đã xếp hạng cho sản phẩm này. Vui lòng không thử lại!";
                    } else {
                        // Nếu người dùng chưa rate cho sản phẩm
                        $this->ratemodel->add($data);
                        $data['average'] = $this->ratemodel->getAverageRateByRatedIdAndType($data['rated_id'], $data['type']);
                        if (isset($data['average']['value']) && $data['average']['value'] != "") {
                            // Nếu lấy được giá trị trung bình rate (rate bình thường)
                            $this->booth_products_model->changeRate($data['rated_id'], array('rate' => $data['average']['value']));
                            $result['value'] = $data['average']['value'];
                        } else {
                            // Nếu không lấy được giá trị trung bình rate (xảy ra lỗi)
                            $result['error'] = 1;
                            $result['message'] = "Thao tác không thành công. Vui lòng thử lại sau!";
                        }
                    }
                } else {
                    // Nếu sản phẩm không tồn tại
                    $result['error'] = 1;
                    $result['message'] = "Doanh nghiệp không tồn tại hoặc đã bị xoá. Vui lòng chọn sản phẩm khác để xếp hạng!";
                }
            } 
        }
        echo json_encode($result);
    }

    function comment($commented_id = null, $type = null) {
        $this->load->helper('user_helper');
        $data['user_id'] = (int) $_SESSION['userLoggedIn']['id'];
        $result = "";
        if (isset($_POST['comment'])) {
            // Nếu có comment
            $data['comment'] = $_POST['comment'];
            unset($_POST['comment']);
        } else {
            // Nếu không có comment, thông báo lỗi
            $result = "error-Vui lòng nhập bình luận!";
        }
        if (!isset($result['error']) && $type == 1) {
            // Dành cho doanh nghiệp
            $data['company_id'] = $commented_id;
            // Lấy thông tin lần cuối comment của người dùng hiện tại
            $last_comment = $this->company_comment_model->getLastCommentByUserIdAndCompanyId($data['user_id'], $data['company_id']);
            // Nếu đã có comment
            if (isset($last_comment['id']) && $last_comment['id'] != "") {
                // Kiểm tra thời gian của comment cuối cùng
                $compare_time = date("Y-m-d H:i:s", strtotime('-5 minutes'));
                $commented_time = date("Y-m-d H:i:s", strtotime($last_comment['commented_time']));
                if ($compare_time < $commented_time) {
                    // Nếu thời gian hiện tại chưa quá 5ph so với thời gian comment lần cuối
                    $result = "error-Mỗi lần đăng bình luận cần cách nhau tối thiểu 5 phút. Vui lòng thử lại sau!";
                }
            }
            // Lưu comment vào CSDL
            if ($result == "") {
                $this->company_comment_model->add($data);
                // Lấy thông tin lần cuối comment của người dùng hiện tại
                $new_comment = $this->company_comment_model->getLastCommentByCompanyId($data['company_id'], $data['user_id']);
                $data['comment'] = $new_comment;
                $this->_data['content'] = $this->load->view('company/listComment', $data);
            }
        } else if (!isset($result['error']) && $type == 2) {
            // Dành cho hồ sơ
            $data['recruitment_id'] = $commented_id;
            // Lấy thông tin lần cuối comment của người dùng hiện tại
            $last_comment = $this->recruitment_comment_model->getLastCommentByUserIdAndRecruitmentId($data['user_id'], $data['recruitment_id']);
            // Nếu đã có comment
            if (isset($last_comment['id']) && $last_comment['id'] != "") {
                // Kiểm tra thời gian của comment cuối cùng
                $compare_time = date("Y-m-d H:i:s", strtotime('-5 minutes'));
                $commented_time = date("Y-m-d H:i:s", strtotime($last_comment['commented_time']));
                if ($compare_time < $commented_time) {
                    // Nếu thời gian hiện tại chưa quá 5ph so với thời gian comment lần cuối
                    $result = "error-Mỗi lần đăng bình luận cần cách nhau tối thiểu 5 phút. Vui lòng thử lại sau!";
                }
            }
            // Lưu comment vào CSDL
            if ($result == "") {
                $this->recruitment_comment_model->add($data);
                // Lấy thông tin lần cuối comment của người dùng hiện tại
                $new_comment = $this->recruitment_comment_model->getLastCommentByRecruitmentId($data['recruitment_id'], $data['user_id']);
                $data['comment'] = $new_comment;
                $this->_data['content'] = $this->load->view('recruitment/listComment', $data);
            }
        } else if (!isset($result['error']) && $type == 3) {
            // Dành cho rao vặt
            $data['ad_id'] = $commented_id;
            // Lấy thông tin lần cuối comment của người dùng hiện tại
            $last_comment = $this->ad_comment_model->getLastCommentByUserIdAndAdId($data['user_id'], $data['ad_id']);
            // Nếu đã có comment
            if (isset($last_comment['id']) && $last_comment['id'] != "") {
                // Kiểm tra thời gian của comment cuối cùng
                $compare_time = date("Y-m-d H:i:s", strtotime('-5 minutes'));
                $commented_time = date("Y-m-d H:i:s", strtotime($last_comment['commented_time']));
                if ($compare_time < $commented_time) {
                    // Nếu thời gian hiện tại chưa quá 5ph so với thời gian comment lần cuối
                    $result = "error-Mỗi lần đăng bình luận cần cách nhau tối thiểu 5 phút. Vui lòng thử lại sau!";
                }
            }
            // Lưu comment vào CSDL
            if ($result == "") {
                $this->ad_comment_model->add($data);
                // Lấy thông tin lần cuối comment của người dùng hiện tại
                $new_comment = $this->ad_comment_model->getLastCommentByAdId($data['ad_id'], $data['user_id']);
                $data['comment'] = $new_comment;
                $this->_data['content'] = $this->load->view('ad/listComment', $data);
            }
        } else if (!isset($result['error']) && $type == 4) {
            // Dành cho sản phẩm
            $data['booth_product_id'] = $commented_id;
            // Lấy thông tin lần cuối comment của người dùng hiện tại
            $last_comment = $this->booth_product_comment_model->getLastCommentByUserIdAndBoothProductId($data['user_id'], $data['booth_product_id']);
            // Nếu đã có comment
            if (isset($last_comment['id']) && $last_comment['id'] != "") {
                // Kiểm tra thời gian của comment cuối cùng
                $compare_time = date("Y-m-d H:i:s", strtotime('-5 minutes'));
                $commented_time = date("Y-m-d H:i:s", strtotime($last_comment['commented_time']));
                if ($compare_time < $commented_time) {
                    // Nếu thời gian hiện tại chưa quá 5ph so với thời gian comment lần cuối
                    $result = "error-Mỗi lần đăng bình luận cần cách nhau tối thiểu 5 phút. Vui lòng thử lại sau!";
                }
            }
            // Lưu comment vào CSDL
            if ($result == "") {
                $this->booth_product_comment_model->add($data);
                // Lấy thông tin lần cuối comment của người dùng hiện tại
                $new_comment = $this->booth_product_comment_model->getLastCommentByBoothProductId($data['booth_product_id'], $data['user_id']);
                $data['comment'] = $new_comment;
                $this->_data['content'] = $this->load->view('booth/listComment', $data);
            }
        } 
        if (isset($result) && $result != "") {
            echo $result;
        }
    }

}

?>